import os
import sys
import xlrd
import xlsxwriter
# 表头元素规范
listhead=['学生姓名','身份证号码','性别','学籍学校','年级','CSP-JS2022提高级第一轮成绩','NOIP2022成绩','指导教师']
listlen=len(listhead)
# 在下方输入需要合并的文件所在文件夹位置
inputpath='../input'
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
elif __file__:
    application_path = os.path.dirname(__file__)
path=os.path.join(application_path,inputpath)
# 在下方输入合并后Excel的路径和文件名
work=xlsxwriter.Workbook('./output.xlsx')
# 新建一个sheet
sheet=work.add_worksheet('combine')
# 合并表表头
for i in range(listlen):
    sheet.write_string(0, i, listhead[i])
# 添加一列表示来源
sheet.write_string(0, listlen, '文件来源')
sheet.set_column(0,listlen,18)
elsesheet=work.add_worksheet('elsesource')
elsesheet.set_column(0,listlen,18)
file_list=os.listdir(path)
file_list.sort()

# Main
file_name='';
x1=2; x2=1;elsex1=1;
fileNum = len(file_list)
print("在该目录下有%d个xlsx文件"%fileNum)
#for files in file_list:
#    print(files)
for file in file_list:
#    if '春季测试报名表' in file:                      
#        file_name = os.path.join(path,file) 
#    else:
#        fileNum-=1
#        continue
    file_name = os.path.join(path,file)
    workbook=xlrd.open_workbook(file_name)
    sheet_name=workbook.sheet_names()
    print(file)
    for sheet_1 in sheet_name:
        table=workbook.sheet_by_name(sheet_1)
        rows=table.nrows
        clos=table.ncols
        print(rows)
        print(clos)
        #提取出表头，判断是否规范
        
        
        if rows!=0:
            listtmp=table.row_values(0)
            print(listtmp)
            print(len(listtmp))
            print(len(listtmp))
            if listhead!=listtmp:
                for i in range(rows):
                    elsesheet.write_row('A'+str(elsex1), table.row_values(i))
                    elsesheet.write_string(elsex1-1, clos, file)
                    elsex1+=1
            else:
                for i in range(1,rows): 
                    sheet.write_row('A'+str(x1),table.row_values(i))
                    sheet.write_string(x1-1, listlen, file)
                    x1+=1
            print(listtmp)

    print('正在合并第%d个文件 '%x2)
    print('已完成 ' + file)
    x2 += 1;
    
print("已将%d个文件合并完成"%fileNum)
work.close()